package com.zc.security.utils;

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Date;

public class JwtUtils {

    private static final String SECRET_KEY = "yourSecretKey"; // 确保使用安全的密钥
    private static final long EXPIRATION_TIME = 86400000; // 有效期1天，单位毫秒
    private static final Logger log = LoggerFactory.getLogger(JwtUtils.class);

    /**
     * 生成JWT令牌
     *
     * @param userId 用户名
     * @return 生成的JWT字符串
     */
    public static String createJwtToken(String userId) {
        Date now = new Date();
        Date expiration = new Date(now.getTime() + EXPIRATION_TIME);

        return Jwts.builder()
                .setSubject(userId)
                .setIssuedAt(now)
                .setExpiration(expiration)
                .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
                .compact();
    }

    /**
     * 验证JWT令牌并获取用户名
     *
     * @param token JWT字符串
     * @return 解析出的用户名，验证失败返回null
     */
    public static String parseToken(String token) {
        try {
            String userId = Jwts.parser()
                    .setSigningKey(SECRET_KEY)
                    .parseClaimsJws(token)
                    .getBody()
                    .getSubject();

            return userId; // 返回用户名
        } catch (Exception e) {
            // 异常处理，如日志记录
            log.error(e.getMessage());
            return null; // 验证失败或过期
        }
    }
}
